#include <stdio.h>
#include <string.h>
#include <math.h>
// strlen:计算一个字符串的长度,不包括\0
// strcpy:字符串拷贝:不会进行越界处理
// strncpy
// strcpm:字符串比较:返回值为0，两个字符串相等  -----   用对应位置的字符相减
// strncmp:比较前n个
// strcat:字符串拼接:不会进行越界处理
// strncat
// strstr:字符串匹配,成功返回第一个字符串的匹配位置，失败返回空指针
// strtok:字符串切割函数,第一个参数传入NULL，代表继续切割上一个字符串  以第二个参数切割第一个字符串,切到无字符串时返回NULL,会修改原字符串，切割完无法使用原字符串



//字符串转整形数据
int atoi(const char *s)
{
    int result = 0;
    int flag = 1;
    if(*s == '-')
    {
        flag = -1;
        s++;
    }
    while(*s != '\0')
    {
        
        if(*s > '0' && *s < '9')
        {
            result = result * 10 + *s - '0';
            s++;
        } 
    }
    return result*flag;
}

//字符串转浮点数
float atof(char *s)
{
    int flag = 1;
    char *p = strtok(s,".");
    char *p1 = strtok(NULL,".");
    float result1 = atoi(p);
    float result2 = atoi(p1);
    for(int i = 0; i < strlen(p1); i++)
    {
        result2 = result2 / 10;
    }
    if(*p == '-')
    {
        result1 = fabs(result1);
        flag = -1;
    }
    return (result1 + result2)*flag;
}


int main()
{
    //字符数组的定义 
    //字符数组的初始化     
    //字符串赋初值      
               
    // char s[] = "hello";//字符数组的初始化
    // //s = "world";要将数组首地址改掉，不正确
    // //char s[] = {'h','e','l','l','o'};
    // printf("%ld,%s\n",sizeof(s),s);
    
    // // char *p = s;
    // // p++;
    // // printf("%c\n",*p);

    // //字符串指针                            指向的字符串常量区，内容无法修改
    // char *p = "hello";
    // p = "world";

    // char s[20] = "zhangsan,lisi,wangwu";
    // char *s1 = "abc";
    // char *s2 = "cba";
    // printf("%d\n",strcmp(s1,s2));
    // printf("%d\n",strncmp(s1,s2,2));
    //char s2[10] = "hellopp";
    //printf("len = %ld\n",strlen(s));
    
    //strcpy(s,"hello");//不会进行越界处理
    //strncpy(s,"hello",sizeof(s)-1);//字符数组最后始终要留一个'\0'

    //strcat(s,"world");//不会进行越界处理
    //strncat(s,"world",sizeof(s)-strlen(s));

    // char *p = strstr(s,s2);
    // if(p == NULL)
    // {
    //     printf("没找到\n");
    //     return -1;
    // }

    //char *p = strtok(s,",");
    // printf("%s\n",p);
    // //第一个参数传入NULL，代表继续切割上一个字符串
    // p = strtok(NULL,",");
    // printf("%s\n",p);

    // while(p != NULL)
    // {
    //     printf("%s\n",p);
    //     p = strtok(NULL,",");
    // }

    //printf("%s %x %x\n",p,s,p);
    



    char s3[10] = "";
    scanf("%s",s3);
    //printf("%d\n",atoi(s3));
    printf("%lf\n",atof(s3));

    return 0;
}